<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.js"></script>
</head>
<body>
<div id="app">
    <input type="text" v-model="msg">
    <hr>
    <input type="text" v-model="obj.name">
    <hr>
    <input type="text" v-model="arr">
    <hr>
</div>
<script>
    Vue.config.productionTip = false
    const vm = new Vue({
        el: '#app',
        data() {
            return {
                msg:'hello vue',
                obj:{
                    name:'zhangsan',
                    age:18
                },
                arr:['北京','上海']
            }
        },
        watch:{
        // 一般用法,监听基本数据类型
            msg(newVal,oldVal){
                console.log(newVal,oldVal,'msg....')
            },
        //    监听数组
            arr(newVal,oldVal){
                console.log(newVal,oldVal,'arr....')
            },
        //    监听对象属性
            'obj.name'(newVal,oldVal){
                console.log(newVal,oldVal,'obj.name....')
            },
        //    深度监听+立即监听
            obj:{
                deep:true,//深度监听
                immediate:true,//立即监听
            //    回调函数
                handler(newVal,oldVal){
                    console.log(newVal,oldVal,'obj深度监听....')
                }
            }
        }
    })
</script>
</body>
</html>